import utils from "./utils.js";
export default {
  /**
   * @param {Object} submitUrl 提交订单接口
   * @param {Object} payData 支付接口
   * @param {string} pay_type 支付方式 0 线上支付（微信支付）2货到付款 3 余额支付
   * @param {Object} back_url 支付成功/失败返回页面
   */
  submitOrder(submitUrl, payData, pay_type, back_url) {
    uni.showLoading({
      title: "提交中"
    });
    submitUrl.then((res) => {
      if (res.code != 0) {
        uni.showToast({
          icon: "none",
          title: res.msg
        });
        return false;
      } else {
        // #ifdef MP-WEIXIN
        payData({
          order_id: res.data.order_id,
          order_id_list: res.data.order_id_list || "",
          pay_type: pay_type,
          _from: "mini"
        }).then((res) => {
          uni.hideLoading();
          this.paySubmit(res, back_url, pay_type);
        });
        // #endif

        // #ifdef APP-PLUS
        payData({
          order_id: res.data.order_id,
          order_id_list: res.data.order_id_list,
          pay_type: pay_type,
          _from: "app"
        }).then((res) => {
          uni.hideLoading();
          this.paySubmit(res, back_url, pay_type);
        });
        // #endif
      }
    });
  },
  /**
   * 订单列表提交支付
   * @param {Object} data 支付内容 order_id pay_type
   * @param {Object} payData 支付接口
   * @param {Object} back_url 支付成功/失败返回页面
   */
  payOrder(data, payData, back_url, cb) {
    uni.showLoading({
      title: "支付中"
    });
    // #ifdef MP-WEIXIN
    payData({
      order_id: data.order_id,
      pay_type: data.pay_type,
      _from: "mini"
    }).then((res) => {
      uni.hideLoading();
      this.paySubmit(res, back_url, () => {
        cb && cb();
      });
    });
    // #endif

    // #ifdef APP-PLUS
    payData({
      order_id: data.order_id,
      pay_type: data.pay_type,
      _from: "app"
    }).then((res) => {
      uni.hideLoading();
      this.paySubmit(res, back_url, data.pay_type, () => {
        cb && cb();
      });
    });
    // #endif
  },
  paySubmit(payData, back_url, pay_type = 1, cb) {
    // #ifdef H5
    if (pay_type == 3 || pay_type == 2) {
      uni.showToast({
        title: payData.msg,
        icon: "none",
        duration: 2000
      });
      if (payData.code > 0) {
        return false;
      } else {
        setTimeout(function () {
          cb && cb();
          back_url &&
            uni.redirectTo({
              url: back_url
            });
        }, 2000);
        return true;
      }
    }
    if (!payData.data) {
      uni.showToast({
        title: payData.msg,
        icon: "none",
        duration: 2000
      });
      setTimeout(function () {
        cb && cb();
        back_url &&
          uni.redirectTo({
            url: back_url
          });
      }, 2000);
      return false;
    } else {
      if (pay_type == 1001 && payData.data?.data?.form_url) {
        setTimeout(function () {
          cb && cb(payData);
          back_url &&
            uni.redirectTo({
              url: back_url
            });
        }, 30);
        return true;
      }
      if (utils.isWechat()) {
        WeixinJSBridge.invoke(
          "getBrandWCPayRequest",
          {
            appId: payData.data.appId, //公众号ID，由商户传入
            timeStamp: payData.data.timeStamp, //时间戳，自1970年以来的秒数
            nonceStr: payData.data.nonceStr, //随机串
            package: payData.data.package,
            signType: payData.data.signType, //微信签名方式：
            paySign: payData.data.paySign //微信签名
          },
          function (res) {
            if (res.err_msg == "get_brand_wcpay_request:ok") {
              // 支付成功
              uni.showToast({
                title: "支付成功",
                icon: "none",
                duration: 2000
              });
            } else {
              uni.showToast({
                title: "订单尚未支付",
                icon: "none",
                duration: 2000
              });
            }
            setTimeout(function () {
              cb && cb();
              back_url &&
                uni.redirectTo({
                  url: back_url
                });
            }, 2000);
          }
        );
      } else {
        window.location.href = payData.res.mweb_url;
        cb();
      }
    }
    // #endif
    // #ifndef H5
    if (pay_type == 3 || pay_type == 2) {
      uni.showToast({
        title: payData.msg,
        icon: "none",
        duration: 2000
      });
      if (payData.code > 0) {
        return false;
      } else {
        setTimeout(function () {
          cb && cb();
          back_url &&
            uni.redirectTo({
              url: back_url
            });
        }, 2000);
        return true;
      }
    }
    if (!payData.data) {
      uni.showToast({
        title: payData.msg,
        icon: "none",
        duration: 2000
      });
      setTimeout(function () {
        cb && cb();
        back_url &&
          uni.redirectTo({
            url: back_url
          });
      }, 2000);
      return false;
    } else {
      if (pay_type == 1001 && payData.data?.data?.form_url) {
        setTimeout(function () {
          cb && cb(payData);
          back_url &&
            uni.redirectTo({
              url: back_url
            });
        }, 30);
        return true;
      }
      uni.getProvider({
        service: "payment",
        success: function (res) {
          // 微信
          if (
            res.provider.indexOf("wxpay") > -1 &&
            (pay_type == 1 || pay_type == 101 || pay_type == 13)
          ) {
            // #ifdef MP-WEIXIN
            uni.requestPayment({
              provider: "wxpay",
              orderInfo: payData.res,
              timeStamp: payData.data.timeStamp,
              nonceStr: payData.data.nonceStr,
              package: payData.data.package,
              signType: payData.data.signType,
              paySign: payData.data.paySign,
              success: function (res) {},
              complete: function (res) {
                let status = 0;
                if (res.errMsg.indexOf("requestPayment:fail") == -1) {
                  uni.showToast({
                    title: "支付成功",
                    icon: "none",
                    duration: 2000
                  });
                  status = 1;
                } else {
                  uni.showToast({
                    title: "订单尚未支付",
                    icon: "none",
                    duration: 2000
                  });
                }
                setTimeout(function () {
                  cb && cb(status);
                  back_url &&
                    uni.redirectTo({
                      url: back_url
                    });
                }, 2000);
                return true;
              }
            });
            // #endif

            // #ifdef APP-PLUS
            uni.requestPayment({
              provider: "wxpay",
              orderInfo: {
                appid: payData.data.appid, // 微信开放平台 - 应用 - AppId，注意和微信小程序、公众号 AppId 可能不一致
                noncestr: payData.data.noncestr, // 随机字符串
                package: payData.data.package, // 固定值
                partnerid: payData.data.partnerid, // 微信支付商户号
                prepayid: payData.data.prepayid, // 统一下单订单号
                timestamp: payData.data.timestamp, // 时间戳（单位：秒）
                sign: payData.data.sign // 签名，这里用的 MD5 签名
              },
              complete: function (res) {
                let status = 0;

                if (res.errMsg.indexOf("requestPayment:fail") == -1) {
                  uni.showToast({
                    title: "支付成功",
                    icon: "none",
                    duration: 2000
                  });
                  status = 1;

                  setTimeout(function () {
                    cb && cb(status);
                    back_url &&
                      uni.redirectTo({
                        url: back_url
                      });
                  }, 2000);
                } else {
                  uni.showToast({
                    title: "支付失败",
                    icon: "none",
                    duration: 2000
                  });
                }

                return true;
              }
            });
            // #endif
          }

          // 支付宝
          if (
            res.provider.indexOf("alipay") > -1 &&
            (pay_type == 4 || pay_type == 401)
          ) {
            uni.requestPayment({
              provider: "alipay",
              orderInfo: payData.data,
              complete: function (res) {
                let status = 0;
                if (res?.errMsg) {
                  uni.showToast({
                    title: "支付成功",
                    icon: "none",
                    duration: 2000,
                  });
                  status = 1;
                } else {
                  uni.showToast({
                    title: "订单尚未支付",
                    icon: "none",
                    duration: 2000
                  });
                }
                setTimeout(function () {
                  cb && cb(status);
                  back_url &&
                    uni.redirectTo({
                      url: back_url
                    });
                }, 2000);
                return true;
              }
            });
          }

          // 头条
          if (res.provider.indexOf("toutiao") > -1 && pay_type == 5) {
            uni.requestPayment({
              provider: "toutiao",
              orderInfo: payData.data,
              service: 5,
              success: function (res) {
                let status = 0;

                if (typeof res.errMsg != "undefined") {
                  uni.showToast({
                    title: "订单尚未支付",
                    icon: "none",
                    duration: 2000
                  });
                }
                if (typeof res.code != "undefined") {
                  if (res.code == 0) {
                    uni.showToast({
                      title: "支付成功",
                      icon: "none",
                      duration: 2000
                    });
                    status = 1;
                  } else {
                    uni.showToast({
                      title: "订单尚未支付",
                      icon: "none",
                      duration: 2000
                    });
                  }
                }
                setTimeout(function () {
                  cb && cb(status);
                  back_url &&
                    uni.redirectTo({
                      url: back_url
                    });
                }, 2000);
                return true;
              },
              complete: function (res) {}
            });
          }
        }
      });
    }
    // #endif
  }
};
